package com.gupao.alg.alg34;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Topic_2_1_YangHui {
    /**
     * 杨辉三角，打印所有行代码
     *
     * @param args
     */
    public static void main(String args[]) {
        int testMeth = 2;
        switch (testMeth) {
            case 1:
                yangHuiBasic();
                break;
            case 2:
                yanghui2();
                break;

        }


    }

    /**
     * 使用最基本的方式实现杨辉三角
     */
    public static void yangHuiBasic() {

        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt()+1;
        int[][] tables = new int[num][];
        for(int i=1;i<num;i++){
            tables[i] = new int[i];
            tables[i][0] = 1;
            tables[i][i-1] = 1;
        }
        if(num-1>2){
            for(int i=3;i<num;i++){
                for(int j=1;j<i-1;j++){
                    tables[i][j] = tables[i-1][j]+tables[i-1][j-1];
                }
            }
        }

        for(int i=1;i<num;i++){
            for(int j=0;j<i;j++){
                System.out.print(tables[i][j]+" ");
            }
            System.out.println();
        }

    }

    /**
     * 使用讲义中比较精简的代码
     *
     * @return
     */
    private static void yanghui2() {
        List<List<Integer>> yanghui = generate(10);
        for (int row = 0; row < yanghui.size(); row++) {
            for (int column = 0; column < yanghui.get(row).size(); column++) {
                System.out.print(yanghui.get(row).get(column) + " ");
            }
            System.out.println();
        }
    }

    /**
     * 使用讲义中比较精简的代码
     *
     * @param numRows
     * @return
     */
    public static List<List<Integer>> generate(int numRows) {
       List<List<Integer>> trigle = new ArrayList<>();
       for(int i=0;i<numRows;i++){
           List<Integer> numbers = new ArrayList<>();
           for(int column=0;column<=i;column++){
               if(column==0||column==i){
                   numbers.add(1);
               }else {
                   numbers.add(trigle.get(i-1).get(column)+trigle.get(i-1).get(column-1));
               }
           }
           trigle.add(numbers);
       }
       return trigle;
    }

}

